import java.util.Date;
import java.util.List;

import persistencia.Criterio;
import persistencia.FachadaPersistencia;

import DTOs.DTOConfirmacion;
import DTOs.DTODatosEstudiante;
import DTOs.DTOEstadoAcademicoGeneral;
import DTOs.DTOProyecto;
import DTOs.DTOProyectoCargo;
import Entidades.Estudiante;
import Entidades.Postulacion;
import Entidades.Proyecto;
import Entidades.ProyectoCargo;
import Entidades.Universidad;


public class ExpertoRegistrarPostulacion {
	
	
	public DTOConfirmacion seleccionarCargo(int codProyectoCargo){
		
	}
	
	public List<DTOProyectoCargo> seleccionarProyecto(int codProyecto){
		
		FachadaPersistencia fp = FachadaPersistencia.getInstancia();
		Criterio c = new Criterio();
		c.setAtributo("codigo");
		c.setOperacion("=");
		c.setValor(codProyecto);		//el codProyecto es int y valor es String :S
		List<Proyecto> proyecto = fp.buscar("Proyecto", c);
		
		List<ProyectoCargo> proyectoCargos = proyecto.getProyectoCargo();  //Hay problema xq la interfaz Proyecto no tiene la asociacion
																		//con los proyCargo, sino la implementacion nada mas
		List<DTOProyectoCargo> listaDTOProyectoCargo;
		
		for(ProyectoCargo proyectoCargo:proyectoCargos){
			Date fechaFin = proyectoCargo.getFechaFinProyectoCargo();
			if(fechaFin ){		// que se yo...
				int codigoProyCargo = proyectoCargo.getCodigo();
				CarreraProyectoCargo carreraProyCargo = proyectoCargo.getCarreraProyectoCargo();
				int cantMateriasRegulares = carreraProyCargo.getMateriasRegulares();
				int cantMateriasRendidas = carreraProyCargo.getMateriasRendidas();
				Carrera carrera = carreraProyCargo.getCarrera();
				String nombreCarrera = carrera.getNombreCarrera();
				//Falta buscar un par de cosas mas
				
				DTOProyectoCargo dtoProyCargo = new DTOProyectoCargo();
				dtoProyCargo.setCantidadMateriasRegulares(cantMateriasRegulares);
				dtoProyCargo.setCantidadMateriasRendidas(cantMateriasRendidas);
				dtoProyCargo.setNombreCargo(nombreCarrera);
				dtoProyCargo.setCodProyectoCargo(codigoProyCargo);
				
				listaDTOProyectoCargo.add(dtoProyCargo);
			}
		}
		
		return listaDTOProyectoCargo;
		
	}
	
	public List<DTOProyecto> verificarEstudiante(String tipoDNIEstudiante, String dniEstudiante, String direccionServidorWeb){
		
		Criterio criterioEstudiante = new Criterio();
		criterioEstudiante.setAtributo("dniEstudiante");
		criterioEstudiante.setOperacion("=");				//Como lleno el criterio si tengo que filtrar por 2 columnas?
		criterioEstudiante.setValor(dniEstudiante);
		
		FachadaPersistencia fp = FachadaPersistencia.getInstancia();
		Estudiante est = (Estudiante) fp.buscar("Estudiante", criterioEstudiante);
		
		//Puede ser que el experto llene los criterios?? o.O significa que tiene que saber como buscar un objeto :S
		Criterio criterioPostulacion = new Criterio();
		criterioPostulacion.setAtributo("estudiante");
		criterioPostulacion.setOperacion("=");
		criterioPostulacion.setValor(est.getDniEstudiante());
		List<Postulacion> postulaciones = fp.buscar("Postulacion", criterioPostulacion);		
		//no se como castear a un list(es mas, tengo que castear todo no?)
		
		DTODatosEstudiante dtoEst = new DTODatosEstudiante();	
		dtoEst.setDniEstudiante(est.getDniEstudiante());
		dtoEst.setTipoDniEstudiante(est.getTipoDniEstudiante());
		dtoEst.setLegajoEstudiante(est.getLegajoEstudiante());
		
		Universidad univ = est.getUniversidad();
		
		FabricaAdaptadorUniversidad fabricaAdaptUniversidad = FabricaAdaptadorUniversidad.getInstancia();
		AdaptadorUniversidad adaptUniv = fabricaAdaptUniversidad.obtenerAdaptadorUniversidad(univ);
		
		DTOEstadoAcademicoGeneral dtoEstadoAcadGral = adaptUniv.obtenerEstadoAcademicoGeneral(dtoEst);
		
		String estadoAcademico = dtoEstadoAcadGral.getEstadoAcademico();
		
		if(estadoAcademico != "regular"){
			//no se como hacer que salga del C.U. si es regular.
			return null;
		}
		
		Criterio criterioProyecto = new Criterio();
		List<Proyecto> proyectos = fp.buscar("Proyecto", criterioProyecto); 
		
		List<DTOProyecto> DTOProyectos;
		for (Proyecto proyecto:proyectos){
			proyecto.getEstado(); //no esta hecha la parte de estados ni tengo idea de como hacerla.
			//Muy pseudocodigo
			if(estado == "vigente"){
				int codigoProy = proyecto.getCodigo();
				String nombreProy = proyecto.getNombre();
				DTOProyecto dtoProy = new DTOProyecto();
				dtoProy.setCodProyecto(codigoProy);
				dtoProy.setNombreProyecto(nombreProy);
				DTOProyectos.add(dtoProy);
			}
		}
		
		return DTOProyectos;
	}

}
